﻿using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using ExcellentProjectPlus.Dominio.Calificaciones.Repositorios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExcellentProjectPlus.Dominio.Calificaciones.Servicios.Cursos
{
    public class ServicioDeAdministracionDeCursos : IServicioDeAdministracionDeCursos
    {
        #region Atributos
        IUnidadDeTrabajoCalificaciones _unidadDeTrabajo;
        #endregion

        #region Constructores
        public ServicioDeAdministracionDeCursos(IUnidadDeTrabajoCalificaciones unidadDeTrabajo)
        {
            _unidadDeTrabajo = unidadDeTrabajo;
        }
        #endregion

        public IEnumerable<Curso> ObtenerCursos()
        {
            return _unidadDeTrabajo.RepositorioCursos.Obtener();
        }
        public Curso ObtenerCursoPorId(int id)
        {
            return _unidadDeTrabajo.RepositorioCursos.ObtenerPorId(id);
        }
        public void AgregarCurso(Curso curso)
        {
            _unidadDeTrabajo.RepositorioCursos.Agregar(curso);
            _unidadDeTrabajo.Confirmar();
        }
        public void ModificarCurso(Curso curso)
        {
            _unidadDeTrabajo.RepositorioCursos.Modificar(curso);
            _unidadDeTrabajo.Confirmar();
        }
        public void EliminarCurso(Curso curso)
        {
            _unidadDeTrabajo.RepositorioCursos.Eliminar(curso);
            _unidadDeTrabajo.Confirmar();
        }
        public IEnumerable<Curso> ObtenerCursosPaginado(int pagina, int tamanio)
        {
            return _unidadDeTrabajo.RepositorioCursos.Obtener(orderBy: c => c.OrderBy(cal => cal.Id),
                page: pagina, pageSize: tamanio);
        }


        public IEnumerable<Curso> ObtenerCursosConPeriodo()
        {
            return _unidadDeTrabajo.RepositorioCursos.Obtener(includeProperties: "Periodo");
        }

        public IEnumerable<InformacionCurso> ObtenerInformacionCursos()
        {
            return _unidadDeTrabajo.RepositorioCursos.ObtenerInformacionCursos();
        }

        public List<Curso> ObtenerCursosPorDocente(int idDocente)
        {
            return _unidadDeTrabajo.RepositorioCursos.Obtener(c => c.IdDocente == idDocente && c.Estado.Equals("Activo", StringComparison.OrdinalIgnoreCase)).ToList();
        }
    }
}
